function maxGap(arr) {
  if(arr == null || arr.length <= 0) {
      return 0;
  }
  var len = arr.length;
  var max = -Infinity, min = Infinity;
  //遍历一遍数组,找到最大值max和最小值min
  for(var i = 0; i < len; i++) {
      max = max > arr[i] ? max : arr[i];
      min = min > arr[i] ? arr[i] : min;
  }
  //若min = max,则差值为0;
  if(min == max) {
      return 0;
  }
  var hasNum = new Array(len + 1);
  var mins = new Array(len + 1);
  var maxs = new Array(len + 1);
  var bid = 0;//指定桶的编号
  for(var i = 0; i < len; i++) {
      bid = bucket(arr[i], min, max, len);//获得该值是在哪个桶//由于有N+1个桶，所以间隔就是N个，所以此处除以的是len，然后通过这个函数得到应该放到哪个桶里
      maxs[bid] = hasNum[bid] ? Math.max(arr[i], maxs[bid]) : arr[i];
      mins[bid] = hasNum[bid] ? Math.min(arr[i], mins[bid]) : arr[i];
      hasNum[bid] = true;
  }
  var res = 0;
  var lastMax = maxs[0];
  for(var i = 0; i < len + 1; i++) {
      if(hasNum[i]) {
          res = Math.max(mins[i] - lastMax, res);
          lastMax = maxs[i];
      }
  }
  return res;
}
//获得桶号
//这个函数用于判断在哪个桶中，参数分别为值、最小值、最大值、桶间隔
function bucket(value, min, max, len) {
  return parseInt((value - min) / ((max - min) / len));
}